WITH Bulletin.io;

PACKAGE BODY Etudiant.io IS

   PROCEDURE Put(X : Etudiant) IS
   BEGIN
      Put(Ada.Text_IO.Current_Output,X);
   END Put;

   PROCEDURE Put(F : Ada.Text_IO.File_TYPE;X : Etudiant) IS
   BEGIN
      Ada.Text_IO.put_line(F,X.Nom & " " & X.Prenom);
      Bulletin.io.Put(F,X.un_bulletin);

   END Put;

   PROCEDURE PutFichier(F : Ada.Text_IO.File_TYPE; X : Etudiant) IS
   BEGIN
      Ada.Text_IO.put_line(F,X.Nom);
      Ada.Text_IO.Put_Line(F,X.Prenom);
      Bulletin.io.PutFichier(F,X.un_bulletin);
   END PutFichier;


   PROCEDURE Get(X : OUT Etudiant) IS
   BEGIN
      Get(Ada.Text_IO.Current_Output,X);
   END Get;

   PROCEDURE Get(F : Ada.Text_IO.File_TYPE ; X : OUT Etudiant) IS
      trop_grandEXCEPTION : EXCEPTION;
      trop_petitEXCEPTION : EXCEPTION;
   BEGIN
      Main_LOOP : LOOP
         Ada.Text_IO.Put_Line("Saisie du nom de l'etudiant : (20 car max)");
         DECLARE
            un_nom : string := Ada.Text_IO.get_line;
         BEGIN
            IF(un_nom'Length > 20) then
               raISe trop_grandEXCEPTION;
            elsIF un_nom'Length = 0 then raISe trop_petitEXCEPTION;
            else
               LOOP
                  Ada.Text_IO.Put_Line("Saisie du prenom de l'etudiant : (20 car max)");
                  DECLARE
                     un_prenom : string := Ada.Text_IO.get_line;
                  BEGIN
                     IF(un_prenom'Length > 20) then
                        raISe trop_grandEXCEPTION;
                     elsIF un_prenom'Length = 0 then raISe trop_petitEXCEPTION; else
                        DECLARE
                           un_etu : Etudiant(un_prenom'Length,un_nom'Length);
                           --un_bull : Bulletin.Bulletin;
                        BEGIN
                           un_etu.Prenom := un_prenom;
                           un_etu.Nom := un_nom;
                           --un_etu.un_bulletin := un_bull;
                           X := un_etu;
                           exit Main_LOOP;
                        END;
                     END IF;
                  EXCEPTION
                     WHEN trop_grandEXCEPTION => Ada.Text_IO.Put_Line("Nom/Prenom saisi trop grand");
                     WHEN trop_petitEXCEPTION => Ada.Text_IO.Put_Line("Veuillez saisir un (pre)nom");
                     WHEN others => Ada.Text_IO.Put_Line("Operation impossible");
                  END;

               END LOOP;
            END IF;

         EXCEPTION
            WHEN trop_grandEXCEPTION => Ada.Text_IO.Put_Line("Nom/Prenom saisi trop grand");
            WHEN trop_petitEXCEPTION => Ada.Text_IO.Put_Line("Veuillez saisir un (pre)nom");
            WHEN others => Ada.Text_IO.Put_Line("Operation impossible");
         END;


      END LOOP Main_LOOP;
   END Get;

   PROCEDURE GetFichier(F : Ada.Text_IO.File_TYPE ; X : OUT Etudiant) IS
      un_nom : constant string := Ada.Text_IO.Get_Line(F);
      un_prenom : constant string := Ada.Text_IO.Get_Line(F);
      un_etu : Etudiant(un_prenom'Length,un_nom'Length);
   BEGIN
      un_etu.Prenom := un_prenom;
      un_etu.Nom := un_nom;
      Bulletin.io.GetFichier(F,un_etu.un_bulletin);
      X:= un_etu;
   END GetFichier;


END Etudiant.IO;

